package com.xy.biz.uc.domain.bo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.*;

/**
 * 
 * 
 * @author zsp
 * @date 2020-8-20
 */
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public class UserGroupBO {

	/**
	 * 加入用户组状态：邀请中
	 */
	public final static int JOIN_STATUS_INVITED = 0;
	/**
	 * 加入用户组状态：已加入
	 */
	public final static int JOIN_STATUS_JOINED = 1;
	
	/**
	 * 分组Id
	 */
	private Long userGroupId;
	/**
	 * 名称
	 */
	private String userGroupName;
	/**
	 * 简称
	 */
	private String userGroupAbbr;
	/**
	 * 排序号
	 */
	private Integer sequence;
	/**
	 * 上级分组Id
	 */
	private Long parentUserGroupId;
	/**
	 * 用户分组类型：0-公司/部门
	 */
	private Integer type;
	/**
	 * 租户Id，0表示不指定
	 */
	private Long tenantId;
	/**
	 * 创建人用户Id
	 */
	private Long createUserId;
	/**
	 * 创建时间
	 */
	private LocalDateTime createTime;
	/**
	 * 更新时间
	 */
	private LocalDateTime updateTime;

	/**
	 * 上级分组
	 */
	private UserGroupBO parentUserGroup;

	/**
	 * 用户Id集合
	 */
	private List<Long> userIdList;
	/**
	 * 用户集合
	 */
	private Set<UserBO> userBOSet;

	/**
	 * 角色Id集合
	 */
	private List<Long> roleIdList;
	/**
	 * 角色集合
	 */
	private Set<RoleBO> roleBOSet;

	public void addUserId(Long userId) {
		Objects.requireNonNull(userId);
		if(userIdList == null) {
			userIdList = new ArrayList<>();
		}
		userIdList.add(userId);
	}

	public void addUserBO(UserBO userBO) {
		Objects.requireNonNull(userBO);
		if(userBOSet == null) {
			userBOSet = new HashSet<>();
		}
		userBOSet.add(userBO);
	}

	@Override
	public boolean equals(Object o) {
		if (this == o) return true;
		if (o == null || getClass() != o.getClass()) return false;
		UserGroupBO that = (UserGroupBO) o;
		return Objects.equals(userGroupId, that.userGroupId);
	}

	@Override
	public int hashCode() {
		return Objects.hash(userGroupId);
	}

}
